/**
 * 
 */
package de.mbenning.fsim.web.controller.spieler;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import de.mbenning.fsim.domain.Ausrichtung;
import de.mbenning.fsim.domain.Land;
import de.mbenning.fsim.domain.Position;
import de.mbenning.fsim.domain.Spieler;
import de.mbenning.fsim.domain.SystemPosition;
import de.mbenning.fsim.persistence.dao.interfaces.ISpielerDAO;
import de.mbenning.fsim.web.controller.AbstractFsimBaseController;
import de.mbenning.fsim.web.servlet.ServletRequestHelper;

/**
 * @author Martin.Benning
 *
 */
public class SpielerEditFormController extends AbstractFsimBaseController {
	
	private ISpielerDAO spielerDAO;
	
	@Override
	protected Object formBackingObject(HttpServletRequest request)
			throws Exception {
		Integer spielerId = ServletRequestUtils.getIntParameter(request, "spielerId", -1);
		Spieler spieler = null;
		if(spielerId.intValue() > 0) {
			spieler = spielerDAO.getSpielerById(spielerId);
		} else {
			spieler = new Spieler();
			spieler.setLand((Land)mainDAO.getLandByName("Deutschland"));
			spieler.setStaatsbuergerschaft((Land)mainDAO.getLandByName("Deutschland"));
			spieler.setFoto("");
		}
		
		return spieler;
	}
	
	@Override
	protected Map<String, Object> referenceData(HttpServletRequest request, Object command,
			Errors errors) throws Exception {
		Map<String, Object> model = new HashMap<String, Object>();
		
		model.put("positionen", Arrays.asList(Position.values()));
		model.put("systemPositionen", Arrays.asList(SystemPosition.values()));
		model.put("ausrichtungen", Arrays.asList(Ausrichtung.values()));
		model.put("laender", mainDAO.findAllLaender());
		model.put("vereine", vereinDAO.findAllVereine());
		
		return model;
	}

	@Override
	protected void onBindAndValidate(HttpServletRequest request,
			Object command, BindException errors) throws Exception {
		super.onBindAndValidate(request, command, errors);
	}

	@Override
	protected ModelAndView onSubmit(HttpServletRequest request,
			HttpServletResponse response, Object command, BindException errors)
			throws Exception {
		Spieler spieler = (Spieler) command;
		String foto = ServletRequestHelper.uploadFile(request, "fotoImage");
		if(foto != null && !foto.equals("")) {
			spieler.setFoto(foto);
		}
		mainDAO.store(spieler);
		return new ModelAndView(new RedirectView("spielerList.htm"));
	}

	public ISpielerDAO getSpielerDAO() {
		return spielerDAO;
	}

	public void setSpielerDAO(ISpielerDAO spielerDAO) {
		this.spielerDAO = spielerDAO;
	}

}
